查看原文
其他

译文|Pulsar Schema Registry

Dave Rusek ApachePulsar 2021-10-18


本文为《Pulsar Schema Registry》中文翻译版本。

原文首发于:

https://www.splunk.com/en_us/blog/it/the-pulsar-schema-registry.html


阅读本文需要大约 4 分钟。

在使用流数据时,我们通常只能使用原始字节流。原始字节流非常灵活,因此适用于数据传输。但是灵活性和中立性使它的性能大打折扣:用户必须进行类型检查和序列化/反序列化,以确保能够读取输入到系统中的字节,并且读取输出字节的进程能够成功解释字节。也就是说,为了解释数据并将数据用于应用程序,用户需要构建各种机制。

旧方法:零沟通,多困扰

在处理原始字节时,有很多不易实现的操作。根据数据类型的变化确保数据的兼容性就是其中一个问题。根据我的个人经验,处理流数据时经常会遇到这种情况。用户添加或删除一个字段,管道就会出现奇怪的错误,仪表板也会停止更新,然后用户不得不花费几个小时进行调试。关于数据结构的信息通常在终端系统的二进制文件中,也就是说,用户只能通过查看差异来确认出错的位置。当数据流经过系统时,找不到能够决定数据结构的单一规范。

即使用户打算将这些定义存储在固定位置,这些定义通常也不能直接连接到流系统。这种存储方式不仅使管道难以保持一致,还使得在系统中(尤其是在实时情况下)几乎无法发现数据。另外,如果用户知道数据结构,则可以构建能够随数据变化而变化的管道。用户可以连接流数据到数据库、索引、分析工具等,从而最大程度地利用系统。

解决方案:Pulsar Schema Registry

Pulsar 2.0 版本[1]包含了新的 Pulsar schema registry[2]。针对上述问题,Pulsar schema registry 是一个更好的解决方案。Schema registry 使 producer 和 consumer 通过 Pulsar broker 即可沟通 Pulsar topic 的数据结构,而不需要借助外部协调机制。Pulsar 支持通过 REST 接口[3]或 producer 指定并上传数据结构(即数据 schema)。用消息名称和消息所代表的 schema 版本为通过系统的每条数据依次进行标记。通过数据 schema,可以发现在系统中传输的全部消息,因此用户可以构建随数据变化而灵活变化的系统。

除此之外,schema registry 可以追踪 schema 版本之间的数据兼容性。在上传新 schema 时,registry 确保旧 consumer 可以读取新 schema 版本,从而确保 producer 不会中断 consumer。Schema 类型可以在 broker 中定义“兼容”,从而实现了 schema 版本之间的数据兼容性。例如,添加字段的 JSON schema 可能会被认定为可兼容,因为终端系统可以在不更新信息的情况下消费此 JSON schema。然后,用户可以用新 schema 升级 producer,并生产消息,但不必担心 consumer 会被数据中断。

要使用 schema,只需为 producer 和 consumer 添加一条信息。在指定 schema 后,用户可以发送、接收数据对象。客户端和 broker 会相互协调,以确保对象符合 schema 定义。

在以下示例中,producer 和 consumer 将以 JSON 格式交换数据。为将此消息同步给 broker,由 broker 所需的 schema 实例化 producer 和 consumer,以验证 producer 和 consumer 之间的兼容性。在这种情况下,使用 JSONSchema 自检 SensorReading 类(与 Jackson 兼容的 POJO),并创建 JSON schema。在连接时,将此信息传输给 broker,并由 broker 检查兼容性。如果认定 producer 或 consumer 不兼容,则以错误终止此连接。

PulsarClient client =PulsarClient.builder().serviceUrl("pulsar://localhost:6650").build();Producer<SensorReading> producer = client.newProducer(JSONSchema.of(SensorReading.class)).topic("sensor-data").create();Consumer<SensorReading> consumer = client.newConsumer(JSONSchema.of(SensorReading.class).topic("sensor-data").subscriptionName("sensor-subscriber").subscribe();

Apache BookKeeper 存储层不仅用于追踪流数据,还支持立即可用的 Pulsar schema registry。Schema 存储后端完全可插拔,并且与其他 schema registry 工具互通,从而允许用户利用现有 schema。

目前,Pulsar schema registry 支持 JSON、“二进制”(旧二进制数据流)、Avro、Protobuf 等格式。与 schema 存储一样,schema 支持完全可插拔,并且可扩展。更多关于 Pulsar schema registry 的信息,参阅 Pulsar 官方文档[4]

引用链接

[1] Pulsar 2.0 版本:

 http://pulsar.apache.org/docs/en/pulsar-2.0/
[2] schema registry: 

https://pulsar.apache.org/docs/en/concepts-schema-registry/
[3] REST 接口: 

http://pulsar.apache.org/admin-rest-api/?version=2.4.2#tag/schemas
[4] Pulsar 官方文档: 

http://pulsar.apache.org/docs/en/next/schema-get-started/

相关阅读

• 《译文 | 使用 Apache Pulsar Functions 进行简单事件处理》• 《快来看!Schema 真的好简单啊!》• 《译文 | 使用 Apache Pulsar Functions 进行简单事件处理》• 《Pulsar IO 中 Schema 的调用流程》

点击「阅读原文」进入 Pulsar 世界!

: . Video Mini Program Like ,轻点两下取消赞 Wow ,轻点两下取消在看

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存